FSx for NetApp ONTAP を CloudFormation で作成してみた
コーヒーが好きな emi です。
FSx for NetApp ONTAP を CloudFormation で作成してみましたので、yaml テンプレートをご紹介します。
前提
ご紹介するテンプレートは事前に以下のリソースが作成済みであることを前提としています。
- VPC は以下の CIDR のものが作成済み
- スタック展開時に VPC を選択するテンプレートにしていますので、必ずこの CIDR でなければスタック展開できないわけではありません。
- ご自身の VPC で実施する場合は管理エンドポイントの IP アドレス範囲だけカスタマイズしてください。
VPC、サブネット | CIDR | ルートテーブル |
---|---|---|
sample-vpc | 10.0.0.0/22 | | |
sample-subnet-public2-ap-northeast-1c | 10.0.1.0/24 | sample-rtb-public |
sample-subnet-private1-ap-northeast-1a | 10.0.2.0/24 | sample-rtb-private |
sample-subnet-private2-ap-northeast-1c | 10.0.3.0/24 | sample-rtb-private |
- FSx for NetApp ONTAP を iSCSI マウントする想定で、EC2 インスタンスに付与するセキュリテイグループが作成済み
スタック作成後は以下のようになる想定です。
マルチ AZ 構成の FSx for NetApp ONTAP が出来上がります。
セキュリテイグループ(図だと ec2-for-iscsi-sg)を EC2 インスタンスに付与して作成すれば、EC2 インスタンスに iSCSI 接続ができる、という状態になります。
ONTAP CLI を実行するための EC2 インスタンスとセキュリティグループは FSx for NetApp ONTAP に Windows Server で iSCSI 接続してみた|DevelopersIO - セキュリテイグループ を参考に別途作成してください。
FSx for NetApp ONTAP を作成する CloudFormation テンプレート(yaml)
AWSTemplateFormatVersion: "2010-09-09" Description: sample-fsxn # ------------------------------------------------------------# # Input Parameters # ------------------------------------------------------------# Parameters: SystemName: Type: String Description: Please type SystemName. Default: sample-fsxn VpcId: Type: AWS::EC2::VPC::Id Description: Select the VPC to create the security group in. Default: vpc-xxx Ec2ForIscsiSecurityGroupId: Type: AWS::EC2::SecurityGroup::Id Description: Select the SecurityGroup (ec2-for-iscsi-sg) to be attached to sample-fsxn. Default: sg-xxx PreferredSubnetId: Type: AWS::EC2::Subnet::Id Description: Select the Preferred Subnet (sample-subnet-private1-ap-northeast-1a) to create the sample-fsxn in. Default: subnet-xxx StandbySubnetId: Type: AWS::EC2::Subnet::Id Description: Select the Standby Subnet (sample-subnet-private2-ap-northeast-1c) to create the sample-fsxn in. Default: subnet-xxx RouteTableId: Type: String Description: Select the route table (sample-rtb-private) for which you want to create rules to route traffic correctly. Default: rtb-xxx Resources: # ------------------------------------------------------------# # Security Group # ------------------------------------------------------------# FsxnSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: VpcId: !Ref VpcId GroupDescription: !Sub ${SystemName} Security Group GroupName: !Sub ${SystemName}-sg Tags: - Key: Name Value: !Sub ${SystemName}-sg # Rule SecurityGroupIngress: - SourceSecurityGroupId: !Ref Ec2ForIscsiSecurityGroupId IpProtocol: tcp FromPort: 3260 ToPort: 3260 # ------------------------------------------------------------# # AWS::FSx::FileSystem # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-filesystem.html # ------------------------------------------------------------# FsxnFileSystem: Type: AWS::FSx::FileSystem DependsOn: FsxnSecurityGroup Properties: # BackupId: String FileSystemType: ONTAP # KmsKeyId: String OntapConfiguration: # https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-fsx-filesystem-ontapconfiguration.html AutomaticBackupRetentionDays: 1 DailyAutomaticBackupStartTime: "16:00" # 16:00 UTC = 1:00 JST DeploymentType: MULTI_AZ_1 DiskIopsConfiguration: Mode: AUTOMATIC EndpointIpAddressRange: 10.0.0.0/28 # FsxAdminPassword: String あとでコンソールから作業用パスワードを指定する PreferredSubnetId: !Ref PreferredSubnetId RouteTableIds: - !Ref RouteTableId ThroughputCapacity: 128 WeeklyMaintenanceStartTime: "5:17:00" # 金曜日 17:00 UTC = 土曜日 2:00 JST SecurityGroupIds: - !Ref FsxnSecurityGroup StorageCapacity: 1024 StorageType: SSD SubnetIds: - !Ref PreferredSubnetId - !Ref StandbySubnetId Tags: - Key: Name Value: !Sub ${SystemName} - Key: environment Value: dev # ------------------------------------------------------------# # AWS::FSx::StorageVirtualMachine # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-storagevirtualmachine.html # ------------------------------------------------------------# FsxnSvm: Type: "AWS::FSx::StorageVirtualMachine" DependsOn: FsxnFileSystem Properties: # ActiveDirectoryConfiguration: 未設定 FileSystemId: !Ref FsxnFileSystem Name: !Sub ${SystemName}-svm RootVolumeSecurityStyle: NTFS # SvmAdminPassword: あとでコンソールから作業用パスワードを指定する Tags: - Key: Name Value: !Sub ${SystemName}-svm - Key: environment Value: dev # ------------------------------------------------------------# # AWS::FSx::Volume # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-volume.html # ------------------------------------------------------------# FsxnVolume1: Type: AWS::FSx::Volume DependsOn: FsxnSvm Properties: Name: fsxn_vol1 OntapConfiguration: CopyTagsToBackups: true JunctionPath: /vol1 OntapVolumeType: RW SecurityStyle: NTFS SizeInMegabytes: 1229 # 1.2 GiB × 1024 = 1228.8 MiB # SnaplockConfiguration: SnapshotPolicy: default # 後から変更可能 StorageEfficiencyEnabled: false StorageVirtualMachineId: !Ref FsxnSvm TieringPolicy: Name: NONE Tags: - Key: Name Value: fsxn_vol1 - Key: environment Value: dev VolumeType: ONTAP FsxnVolume2: Type: AWS::FSx::Volume DependsOn: FsxnSvm Properties: Name: fsxn_vol2 OntapConfiguration: CopyTagsToBackups: true JunctionPath: /vol2 OntapVolumeType: RW SecurityStyle: NTFS SizeInMegabytes: 163840 # 160 GiB × 1024 = 163840 MiB # SnaplockConfiguration: SnapshotPolicy: default # 後から変更可能 StorageEfficiencyEnabled: false StorageVirtualMachineId: !Ref FsxnSvm TieringPolicy: Name: NONE Tags: - Key: Name Value: fsxn_vol2 - Key: environment Value: dev VolumeType: ONTAP
Input Parameters セクション
スタック作成時に以下のパラメーターを指定しています。
- システム名
- ここで指定した文字列がファイルシステムや SVM の名称に組み込まれます。
- VPC ID
- FSx for NetApp ONTAP をマウントする EC2 インスタンスに付与するセキュリテイグループ ID
- FSx for NetApp ONTAP に付与するセキュリテイグループのインバウンドルールに使用します。
- 優先サブネットのサブネット ID
- スタンバイサブネットのサブネット ID
- ファイルシステムに関連付けるルートテーブル
- 管理エンドポイントへのルートが追加されるルートテーブルです。
スタック展開時は以下のようになります。
===追記===
AWS::FSx::FileSystem セクションの「EndpointIpAddressRange: 10.0.0.0/28」の部分もパラメーターとして外に出しておいた方がより分かりやすく、スタック展開時に変更しやすいな…と後から気づきました。
===追記ここまで===
Security Group セクション
# ------------------------------------------------------------# # Security Group # ------------------------------------------------------------# FsxnSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: VpcId: !Ref VpcId GroupDescription: !Sub ${SystemName} Security Group GroupName: !Sub ${SystemName}-sg Tags: - Key: Name Value: !Sub ${SystemName}-sg # Rule SecurityGroupIngress: - SourceSecurityGroupId: !Ref Ec2ForIscsiSecurityGroupId IpProtocol: tcp FromPort: 3260 ToPort: 3260
FSx for NetApp ONTAP に付与するセキュリテイグループを作成しています。
FSx for NetApp ONTAP をマウントする EC2 インスタンスに付与するセキュリテイグループからのインバウンド TCP ポート 3260(iSCSI)を許可するルールを設定しています。
利用するプロトコルによって書き換えてください。
AWS::FSx::FileSystem セクション
# ------------------------------------------------------------# # AWS::FSx::FileSystem # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-filesystem.html # ------------------------------------------------------------# FsxnFileSystem: Type: AWS::FSx::FileSystem DependsOn: FsxnSecurityGroup Properties: # BackupId: String FileSystemType: ONTAP # KmsKeyId: String OntapConfiguration: # https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-properties-fsx-filesystem-ontapconfiguration.html AutomaticBackupRetentionDays: 1 DailyAutomaticBackupStartTime: "16:00" # 16:00 UTC = 1:00 JST DeploymentType: MULTI_AZ_1 DiskIopsConfiguration: Mode: AUTOMATIC EndpointIpAddressRange: 10.0.0.0/28 # FsxAdminPassword: String あとでコンソールから作業用パスワードを指定する PreferredSubnetId: !Ref PreferredSubnetId RouteTableIds: - !Ref RouteTableId ThroughputCapacity: 128 WeeklyMaintenanceStartTime: "5:17:00" # 金曜日 17:00 UTC = 土曜日 2:00 JST SecurityGroupIds: - !Ref FsxnSecurityGroup StorageCapacity: 1024 StorageType: SSD SubnetIds: - !Ref PreferredSubnetId - !Ref StandbySubnetId Tags: - Key: Name Value: !Sub ${SystemName} - Key: environment Value: dev
ファイルシステムの作成をしています。
DependsOn:
で、セキュリティグループが出来上がってからファイルシステムの作成をするよう指定しています。
FileSystemType:
でファイスシステムのタイプ ONTAP
を指定します。
OntapConfiguration:
の中で自動バックアップ、デプロイタイプ(マルチ AZ / シングル AZ)、管理エンドポイントの IP アドレス範囲、IOPS、スループット、優先・スタンバイサブネット、ルートテーブルを指定しています。ファイスシステム管理ユーザーのパスワードはあとから設定できるので今回は設定していません。
WeeklyMaintenanceStartTime:
はメンテナンスウィンドウの設定で、D:HH:MM
の形式で指定します。D は曜日で、1 は月曜日~7 は日曜日です。
D | 曜日 |
---|---|
1 | 月曜日 |
2 | 火曜日 |
3 | 水曜日 |
4 | 木曜日 |
5 | 金曜日 |
6 | 土曜日 |
7 | 日曜日 |
5:17:00
は金曜日 17:00 UTC = 土曜日 2:00 JST です。
StorageCapacity:
は SSD ストレージ容量で、最小 1024 GiB ~最大 192 TiB を指定できます。
管理エンドポイントの IP アドレス範囲については以下のブログもご参照ください。
AWS::FSx::StorageVirtualMachine セクション
# ------------------------------------------------------------# # AWS::FSx::StorageVirtualMachine # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-storagevirtualmachine.html # ------------------------------------------------------------# FsxnSvm: Type: "AWS::FSx::StorageVirtualMachine" DependsOn: FsxnFileSystem Properties: # ActiveDirectoryConfiguration: 未設定 FileSystemId: !Ref FsxnFileSystem Name: !Sub ${SystemName}-svm RootVolumeSecurityStyle: NTFS # SvmAdminPassword: あとでコンソールから作業用パスワードを指定する Tags: - Key: Name Value: !Sub ${SystemName}-svm - Key: environment Value: dev
SVM を作成しています。
Active Directory に参加させる場合はここで設定します。
RootVolumeSecurityStyle:
はボリュームのセキュリティスタイルで、MIXED
、NTFS
、UNIX
のいずれかを指定します。
SVM 管理ユーザーのパスワードはあとから設定できるので今回は設定していません。
AWS::FSx::Volume セクション
# ------------------------------------------------------------# # AWS::FSx::Volume # https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-fsx-volume.html # ------------------------------------------------------------# FsxnVolume1: Type: AWS::FSx::Volume DependsOn: FsxnSvm Properties: Name: fsxn_vol1 OntapConfiguration: CopyTagsToBackups: true JunctionPath: /vol1 OntapVolumeType: RW SecurityStyle: NTFS SizeInMegabytes: 1229 # 1.2 GiB × 1024 = 1228.8 MiB # SnaplockConfiguration: SnapshotPolicy: default # 後から変更可能 StorageEfficiencyEnabled: false StorageVirtualMachineId: !Ref FsxnSvm TieringPolicy: Name: NONE Tags: - Key: Name Value: fsxn_vol1 - Key: environment Value: dev VolumeType: ONTAP FsxnVolume2: Type: AWS::FSx::Volume DependsOn: FsxnSvm Properties: Name: fsxn_vol2 OntapConfiguration: CopyTagsToBackups: true JunctionPath: /vol2 OntapVolumeType: RW SecurityStyle: NTFS SizeInMegabytes: 163840 # 160 GiB × 1024 = 163840 MiB # SnaplockConfiguration: SnapshotPolicy: default # 後から変更可能 StorageEfficiencyEnabled: false StorageVirtualMachineId: !Ref FsxnSvm TieringPolicy: Name: NONE Tags: - Key: Name Value: fsxn_vol2 - Key: environment Value: dev VolumeType: ONTAP
今回のテンプレートでは二つボリュームを作成しています。
OntapConfiguration:
でバックアップにタグをコピーするか、ジャンクションパス、ボリュームタイプ、セキュリティスタイル、サイズ、スナップショットポリシー、ストレージ効率、階層化ポリシーを指定します。
作成後の情報表示
CloudFormation で作成した FSx for NetApp ONTAP の情報を AWS CLI で出力した結果をご参考に貼っておきます。
- ファイルシステムの情報
aws fsx describe-file-systems \ --file-system-ids fs-0778589e130d6fae7
実行結果(クリックで展開)
[cloudshell-user@ip-10-4-7-102 ~]$ aws fsx describe-file-systems \ > --file-system-ids fs-0778589e130d6fae7 { "FileSystems": [ { "OwnerId": "123456789012", "CreationTime": "2023-09-18T11:46:21.886000+00:00", "FileSystemId": "fs-0778589e130d6fae7", "FileSystemType": "ONTAP", "Lifecycle": "AVAILABLE", "StorageCapacity": 1024, "StorageType": "SSD", "VpcId": "vpc-09da5bdf34523f35f", "SubnetIds": [ "subnet-019a340459c36d57e", "subnet-0c38e2bc71cb95841" ], "NetworkInterfaceIds": [ "eni-00e873dafa5848805", "eni-01319416fed015b3d" ], "KmsKeyId": "arn:aws:kms:ap-northeast-1:123456789012:key/ee0ea132-9a29-4da3-9396-3e344af171ee", "ResourceARN": "arn:aws:fsx:ap-northeast-1:123456789012:file-system/fs-0778589e130d6fae7", "Tags": [ { "Key": "aws:cloudformation:stack-name", "Value": "sample-fsxn" }, { "Key": "aws:cloudformation:logical-id", "Value": "FsxnFileSystem" }, { "Key": "environment", "Value": "dev" }, { "Key": "aws:cloudformation:stack-id", "Value": "arn:aws:cloudformation:ap-northeast-1:123456789012:stack/sample-fsxn/bce329d0-5615-11ee-8780-0eecb71a0615" }, { "Key": "Name", "Value": "sample-fsxn" } ], "OntapConfiguration": { "AutomaticBackupRetentionDays": 1, "DailyAutomaticBackupStartTime": "16:00", "DeploymentType": "MULTI_AZ_1", "EndpointIpAddressRange": "10.0.0.0/28", "Endpoints": { "Intercluster": { "DNSName": "intercluster.fs-0778589e130d6fae7.fsx.ap-northeast-1.amazonaws.com", "IpAddresses": [ "10.0.2.72", "10.0.3.193" ] }, "Management": { "DNSName": "management.fs-0778589e130d6fae7.fsx.ap-northeast-1.amazonaws.com", "IpAddresses": [ "10.0.0.11" ] } }, "DiskIopsConfiguration": { "Mode": "AUTOMATIC", "Iops": 3072 }, "PreferredSubnetId": "subnet-019a340459c36d57e", "RouteTableIds": [ "rtb-08c78aa814ae39ed8" ], "ThroughputCapacity": 128, "WeeklyMaintenanceStartTime": "5:17:00" } } ] } [cloudshell-user@ip-10-4-7-102 ~]$
- SVM の情報
aws fsx describe-storage-virtual-machines \ --storage-virtual-machine-ids svm-05c334a475a2cfe35
実行結果(クリックで展開)
[cloudshell-user@ip-10-4-7-102 ~]$ aws fsx describe-storage-virtual-machines \ > --storage-virtual-machine-ids svm-05c334a475a2cfe35 { "StorageVirtualMachines": [ { "CreationTime": "2023-09-18T11:46:32.486000+00:00", "Endpoints": { "Iscsi": { "DNSName": "iscsi.svm-05c334a475a2cfe35.fs-0778589e130d6fae7.fsx.ap-northeast-1.amazonaws.com", "IpAddresses": [ "10.0.2.187", "10.0.3.60" ] }, "Management": { "DNSName": "svm-05c334a475a2cfe35.fs-0778589e130d6fae7.fsx.ap-northeast-1.amazonaws.com", "IpAddresses": [ "10.0.0.9" ] }, "Nfs": { "DNSName": "svm-05c334a475a2cfe35.fs-0778589e130d6fae7.fsx.ap-northeast-1.amazonaws.com", "IpAddresses": [ "10.0.0.9" ] } }, "FileSystemId": "fs-0778589e130d6fae7", "Lifecycle": "CREATED", "Name": "sample-fsxn-svm", "ResourceARN": "arn:aws:fsx:ap-northeast-1:123456789012:storage-virtual-machine/fs-0778589e130d6fae7/svm-05c334a475a2cfe35", "StorageVirtualMachineId": "svm-05c334a475a2cfe35", "Subtype": "DEFAULT", "UUID": "392c61b3-5619-11ee-aeca-375a5c7bf27e" } ] } [cloudshell-user@ip-10-4-7-102 ~]$
- ボリュームの情報①
aws fsx describe-volumes \ --volume-ids fsvol-0b84a4bdf95a4ab70
実行結果(クリックで展開)
[cloudshell-user@ip-10-4-7-102 ~]$ aws fsx describe-volumes \ > --volume-ids fsvol-0b84a4bdf95a4ab70 { "Volumes": [ { "CreationTime": "2023-09-18T11:49:42.675000+00:00", "FileSystemId": "fs-0778589e130d6fae7", "Lifecycle": "CREATED", "Name": "fsxn_vol1", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/vol1", "SecurityStyle": "NTFS", "SizeInMegabytes": 1229, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-05c334a475a2cfe35", "StorageVirtualMachineRoot": false, "TieringPolicy": { "Name": "NONE" }, "UUID": "819b441a-5619-11ee-aeca-375a5c7bf27e", "OntapVolumeType": "RW", "SnapshotPolicy": "default", "CopyTagsToBackups": true }, "ResourceARN": "arn:aws:fsx:ap-northeast-1:123456789012:volume/fs-0778589e130d6fae7/fsvol-0b84a4bdf95a4ab70", "VolumeId": "fsvol-0b84a4bdf95a4ab70", "VolumeType": "ONTAP" } ] } [cloudshell-user@ip-10-4-7-102 ~]$
- ボリュームの情報②
aws fsx describe-volumes \ --volume-ids fsvol-00cd825c8fc7ad623
実行結果(クリックで展開)
[cloudshell-user@ip-10-4-7-102 ~]$ aws fsx describe-volumes \ > --volume-ids fsvol-00cd825c8fc7ad623 { "Volumes": [ { "CreationTime": "2023-09-18T11:49:42.679000+00:00", "FileSystemId": "fs-0778589e130d6fae7", "Lifecycle": "CREATED", "Name": "fsxn_vol2", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/vol2", "SecurityStyle": "NTFS", "SizeInMegabytes": 163840, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-05c334a475a2cfe35", "StorageVirtualMachineRoot": false, "TieringPolicy": { "Name": "NONE" }, "UUID": "81d1c9f0-5619-11ee-aeca-375a5c7bf27e", "OntapVolumeType": "RW", "SnapshotPolicy": "default", "CopyTagsToBackups": true }, "ResourceARN": "arn:aws:fsx:ap-northeast-1:123456789012:volume/fs-0778589e130d6fae7/fsvol-00cd825c8fc7ad623", "VolumeId": "fsvol-00cd825c8fc7ad623", "VolumeType": "ONTAP" } ] } [cloudshell-user@ip-10-4-7-102 ~]$
- ルートボリュームの情報
aws fsx describe-volumes \ --volume-ids fsvol-0346ecac3721e05ac
実行結果(クリックで展開)
[cloudshell-user@ip-10-4-7-102 ~]$ aws fsx describe-volumes \ > --volume-ids fsvol-0346ecac3721e05ac { "Volumes": [ { "CreationTime": "2023-09-18T11:48:03+00:00", "FileSystemId": "fs-0778589e130d6fae7", "Lifecycle": "CREATED", "Name": "sample_fsxn_svm_root", "OntapConfiguration": { "FlexCacheEndpointType": "NONE", "JunctionPath": "/", "SecurityStyle": "NTFS", "SizeInMegabytes": 1024, "StorageEfficiencyEnabled": false, "StorageVirtualMachineId": "svm-05c334a475a2cfe35", "StorageVirtualMachineRoot": true, "TieringPolicy": { "Name": "NONE" }, "UUID": "39aecf8f-5619-11ee-aeca-375a5c7bf27e", "OntapVolumeType": "RW", "SnapshotPolicy": "default", "CopyTagsToBackups": false }, "ResourceARN": "arn:aws:fsx:ap-northeast-1:123456789012:volume/fs-0778589e130d6fae7/fsvol-0346ecac3721e05ac", "VolumeId": "fsvol-0346ecac3721e05ac", "VolumeType": "ONTAP" } ] } [cloudshell-user@ip-10-4-7-102 ~]$
CloudFormation スタックを削除するとボリュームのバックアップが作成される
20231004 追記
CloudFormation スタックを削除するとボリュームのバックアップが作成されて残ります。不要な場合は削除してください。
おわりに
FSx for NetApp ONTAP を CloudFormation で作成してみました。どなたかのお役に立てば幸いです。